package com.back.campus_back.controller;
import com.back.campus_back.domain.Goods;
import com.back.campus_back.domain.GoodsCategory;
import com.back.campus_back.mapper.GoodsCategoryMapper;
import com.back.campus_back.service.impl.GoodsServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author ${author}
 * @since 2021-04-17
 */
@RestController
@RequestMapping("/goods")
@Api(tags = "商品的控制类")
public class GoodsController {
    @Autowired
    GoodsServiceImpl goodsService;

    @Autowired
    GoodsCategoryMapper goodsCategoryMapper;


    /*
     * 查询全部商品
     * */
    @ApiOperation("查询全部商品")
    @GetMapping("/findAllGoods")
    public List<Goods> findAllGoods(){
        return goodsService.findAllGoods();
    }

    /*
     * 查询全部商品：分页查询(当前页和查询数目)
     * */
    @ApiOperation("全部商品：分页查询(当前页和查询数目)")
    @GetMapping("/findAllGoods/{current}/{size}")
    public IPage<Goods> findAllGoods(@PathVariable("current")Integer current, @PathVariable("size")Integer size){
        return goodsService.findAllGoods(current,size);
    }

    /*
     * 根据商品id查询商品
     * */
    @ApiOperation("根据商品id查询商品")
    @GetMapping("/findGoodsById/{id}")
    public Goods findGoodsById(@PathVariable("id")Integer id){
        return goodsService.findGoodsById(id);
    }


    /*
     * 根据商品的分类获取首页全部商品展示的商品信息
     * */
    @ApiOperation("根据商品的分类获取商品信息")
    @GetMapping("/findGoodsByType/{goods_type}/{current}/{size}")
    public IPage<Goods> findGoodsByType(@PathVariable("goods_type")Integer goods_type,@PathVariable("current")Integer current, @PathVariable("size")Integer size){
        return goodsService.findGoodsByType(goods_type,current,size);
    }

    /*
     * 根据商品分类id获取首页展示的前七条商品信息
     * */
    @ApiOperation("根据商品分类id获取首页展示的前七条商品信息")
    @GetMapping("/getPromoGoods/{goods_type}")
    public List<Goods> getPromoGoods(@PathVariable("goods_type")Integer goods_type){
        return goodsService.getPromoGoods(goods_type);
    }

    /*
     * 根据名字模糊查询商品模加分页
     * pageNum:当前页
     * pageSize:数目
     * */
    @ApiOperation("根据名字模糊查询商品模加分页")
    @GetMapping("/SearchGoods/{goodsName}/{current}/{size}")
    public IPage<Goods> SearchGoods(@PathVariable("goodsName")String goodsName, @PathVariable("current")Integer current, @PathVariable("size")Integer size){
        //如果没写请求参数就默认搜索第一页的3条
        if(current == null){
            current = 1;
        }
        if(size == null){
            size = 3 ;
        }
        //如果没填模糊查询名，就让他分页显示全部商品
        if (goodsName == null || goodsName == ""){
            return goodsService.findAllGoods(current,size);
        }
        return goodsService.SearchGoods(goodsName,current,size);
    }

    /*
     * 发布商品
     * */
    @ApiOperation("发布商品")
    @PostMapping("/userInsertGoods")

    public String userInsertGoods(@RequestBody  Goods goods) {
        return goodsService.userInsertGoods(goods);
    }


    /*
     * 根据用户的id查询用户发布的商品信息
     * */
    @ApiOperation("根据用户的id查询发布的商品信息(status为0(下架),1(正常),2(卖出))")
    @GetMapping("/findGoodsByStuId/{student_id}/{current}/{size}/{status}")
    public IPage<Goods> findGoodsByStuId(@PathVariable("student_id")Integer student_id,
                                         @PathVariable("current")Integer current,
                                         @PathVariable("size")Integer size,
                                         @PathVariable("status")Integer status){
        return goodsService.findGoodsByStuId(student_id,current,size,status);
    }


    /*
     * 更新
     * 商品信息
     * */
    @ApiOperation("更新商品信息")
    @PostMapping("/updateGoodsInfo")
    public String updateGoodsInfo(@RequestBody Goods goods){
        return goodsService.updateGoodsInfo(goods);
    }


    /*
     * 用户根据商品的id，重新上架或者下架自己发布的商品
     * 重新上架:status==>1
     * 下架:status==>0
     * */
    @ApiOperation("用户根据商品的id，重新上架(status=1)或者下架(status=0)自己发布的商品status=0")
    @GetMapping("/updateGoodsStatusById/{id}/{status}")
    public String updateGoodsStatusById(@PathVariable("id") Integer id,@PathVariable("status")Integer status){
        return goodsService.updateGoodsStatusById(id,status);
    }


    //用户添加商品
    @RequestMapping(value = "/upload", method = RequestMethod.POST)
    public Map<String, Object> uploadImg(
            @RequestParam(value = "file", required = false) MultipartFile file, Goods goods ) {
        //获取传进来的对象，拿到所属的商品分类
        int goodType = goods.getGoodsType();
        QueryWrapper<GoodsCategory> wrapper=new QueryWrapper<>();
        wrapper.eq("category_id",goodType);
        GoodsCategory goodsCategory= goodsCategoryMapper.selectOne(wrapper);
        //获取所对应的类型文件夹
        String cateFileName=goodsCategory.getCategoryFile();

        //构建文件上传所要保存的"文件夹路径"--这里是相对路径，保存到项目根路径的文件夹下, 项目根路径下的目录
        String url="src/main/resources/static/imgs/"+cateFileName;
        String path = new String(url);

        //这是存放的上传文件的文件夹
        File uploads = new File(path);

        // 如果文件夹不存在则创建
        if (!uploads.exists() && !uploads.isDirectory()) {
            uploads.mkdirs();
        }

        String fileName = file.getOriginalFilename(); //得到上传时的文件名。
        try {
            File newfile = new File(uploads.getAbsolutePath() + File.separator + fileName);
            // 将上传的文件写入指定文件.
            file.transferTo(newfile);
        } catch (Exception e) {

            e.printStackTrace();
        }
        // 将文件上传的路径给保存到数据库
        String tmp_path = "../imgs/"+cateFileName+"/"+fileName;
        Map<String, Object> resultMap = new HashMap<String, Object>();
        resultMap.put("tmp_path",tmp_path);

        return resultMap;
    }



}

